package cn.tiga.controller;

import cn.tiga.block.DowngradeUtil;
import cn.tiga.domain.User;
import cn.tiga.downgrade.FuseDowngradeUtil;
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
@RefreshScope // 动态刷新配置注解
public class UserController {

    @Value("${test.name}")
    private String name;

    @GetMapping("/getById/{id}")
    //@SentinelResource(value="user-server-getById", blockHandler = "degradationMethod",blockHandlerClass = DowngradeUtil.class)
    //@SentinelResource(value="user-server-getById", fallback = "fuseDegradation")
    @SentinelResource(value="user-server-getById", fallback = "fuseDegradation", fallbackClass = FuseDowngradeUtil.class)
    public User getById(@PathVariable("id") Long id){
        try {
            // 用于让服务慢响应
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return new User(id, "佘动动传媒", "我在源码时代演电影!，端口号：" + name );
    }
//    public User degradationMethod(@PathVariable("id") Long id, BlockException e){
//        e.printStackTrace();
//        return new User(-1L, "服务降级触发！", "当前服务流量过大，请稍后重试！");
//    }
public User fuseDegradation(@PathVariable("id") Long id, Throwable  e){
    e.printStackTrace();
    return new User(-1L, "熔断服务降级触发！", "服务不可用，请稍后重试！");

}
}
